from .base_strategy import BaseStrategy
import backtrader as bt
import MyTT
# 动量策略（追涨杀跌）
class MyStrategy2(BaseStrategy):
    params = (
        ('lookback_period', 20),  # 过去20个交易日
        ('threshold', 0.02),      # 涨幅阈值2%
    )
 
    def __init__(self):
        super().__init__()

        self.init_indicators()
        # 用于跟踪订单
        self.order = None
    
    def init_indicators(self):
        """在此定义指标 (EMA/MACD/RSI等)"""
       # 计算过去20个交易日的涨幅
        self.returns = bt.indicators.ROC(self.data.close, period=self.p.lookback_period)
 
        # 长期趋势判断
        self.long_term_trend = bt.indicators.SMA(self.data.close, period=100)  # 100日均线作为长期趋势
 


    def notify_order(self, order):
        super().notify_order(order)
 
    def next(self):
        super().next()
 
        # 检查是否有持仓
        if not self.position:
            # 判断长期趋势
            if self.data.close[0] > self.long_term_trend[0]:  # 长期趋势为多头
                if self.returns[0] > self.p.threshold:  # 过去20日涨幅大于2%
                    self.buy()  # 开多单
            else:  # 长期趋势为空头
                if self.returns[0] < -self.p.threshold:  # 过去20日跌幅大于2%
                    self.buy()  # 开空单
        else:
            # 判断离场条件
            if self.position.size > 0:  # 当前为多头仓位
                if self.returns[0] < -self.p.threshold:  # 过去20日涨幅跌破2%
                    self.close()  # 平多单
            elif self.position.size < 0:  # 当前为空头仓位
                if self.returns[0] > self.p.threshold:  # 过去20日跌幅跌破2%
                    self.close()  # 平空单
 